import pandas as pd
import matplotlib.pyplot as plt
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie, Line

# 读取 CSV 文件
df1 = pd.read_csv('B:/spark ks/pythonProject/Dataset/books.csv', on_bad_lines='skip')
df = pd.read_csv('B:/spark ks/pythonProject/Dataset/books_cleaned.csv')

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 创建视图（在 pandas 中可理解为继续使用 df 操作，这里仅为对应题目要求概念）
# 假设最受关注用 ratings_count 列衡量，找出前 10 本最受关注的书籍
top_10_popular_books = df.nlargest(10, 'ratings_count')[['title', 'ratings_count']]

# 假设篇幅用 num_pages 列衡量，找出前 10 个最长篇幅的书籍
top_10_longest_books = df.nlargest(10, 'num_pages')[['title', 'num_pages']]

# 统计不同语言的书籍数量
language_counts = df['language_code'].value_counts().reset_index(name='count')

# 找出前 1000 个最受关注的书籍，统计与出版社的关系
top_1000_popular_books = df.nlargest(1000, 'ratings_count')
publisher_counts_in_top_1000 = top_1000_popular_books['publisher'].value_counts().reset_index(name='count')

# 提取出版年份，统计出版书籍的数量与时间（年份）的关系
df['publication_year'] = pd.to_datetime(df['publication_date'], errors='coerce').dt.year
yearly_book_counts = df['publication_year'].value_counts().sort_index().reset_index(name='count')

# 可视化前 10 本最受关注的书籍
plt.figure(figsize=(10, 6))
plt.bar(top_10_popular_books['title'], top_10_popular_books['ratings_count'])
plt.xlabel('书籍标题')
plt.ylabel('关注数量（评分数量）')
plt.title('前 10 本最受关注的书籍')
plt.xticks(rotation=90)
plt.show()

# 可视化前 10 个最长篇幅的书籍
plt.figure(figsize=(10, 6))
plt.bar(top_10_longest_books['title'], top_10_longest_books['num_pages'])
plt.xlabel('书籍标题')
plt.ylabel('页数')
plt.title('前 10 个最长篇幅的书籍')
plt.xticks(rotation=90)
plt.show()

# 可视化不同语言的书籍数量（饼图）
plt.figure(figsize=(8, 8))
plt.pie(language_counts['count'], labels=language_counts['language_code'], autopct='%1.1f%%')
plt.title('不同语言的书籍数量占比')
plt.show()

# 使用 pyecharts 可视化前 1000 个最受关注的书籍数量与出版社的关系（柱状图）
bar = (
    Bar()
    .add_xaxis(publisher_counts_in_top_1000['publisher'].tolist())
    .add_yaxis("数量", publisher_counts_in_top_1000['count'].tolist())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="前 1000 个最受关注的书籍数量与出版社的关系"),
        toolbox_opts=opts.ToolboxOpts(is_show=True),
        xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 45})
    )
)
bar.render("B:/spark ks/pythonProject/top_1000_publisher_relationship.html")

# 使用 pyecharts 可视化出版书籍的数量与时间（年份）的关系（折线图）
line = (
    Line()
    .add_xaxis(yearly_book_counts['publication_year'].astype(str).tolist())
    .add_yaxis("书籍数量", yearly_book_counts['count'].tolist(), is_smooth=True)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="出版书籍的数量与时间（年份）的关系"),
        toolbox_opts=opts.ToolboxOpts(is_show=True),
        xaxis_opts=opts.AxisOpts(name="年份"),
        yaxis_opts=opts.AxisOpts(name="书籍数量")
    )
)
line.render("B:/spark ks/pythonProject/yearly_book_counts.html")